package Demo74;


import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.List;
import java.util.Queue;
import java.util.concurrent.ConcurrentLinkedQueue;

/**
 * N 叉树的层序遍历
 * https://leetcode.cn/problems/n-ary-tree-level-order-traversal/submissions/562734135/
 */

class Solution {
    public List<List<Integer>> levelOrder(Node root) {
        List<List<Integer>> ret = new ArrayList<>();
        // 边界值处理
        if(root == null) return ret;
        // 创建一个队列
        Queue<Node> queue = new ArrayDeque<>();
        // 将根结点放入队列中
        queue.add(root);
        while(!queue.isEmpty()) {
            // 使用一个变量来记录每一层的元素
            int tmp = queue.size();
            // 创建一个该层的统计链表
            List<Integer> list = new ArrayList<>();
            while(tmp > 0) {
                // 从队列中拿取节点
                Node node = queue.poll();
                // 将节点的值放入列表中
                list.add(node.val);

                // 取出子节点放入到队列中
                List<Node> children = node.children;
                for(Node n : children) {
                    queue.add(n);
                }
                tmp--;
            }
            // 将层链表放入到返回链表中
            ret.add(list);
        }
        return ret;
    }
}